home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- *
- * NSSDC/CDF Quick Start Test Program (C interface).
- *
- * Version 1.6, 10-Feb-92, ST Systems (STX)
- *
- * Modification history:
- *
- * V1.0 24-Jan-91, J Love Original version (for CDF V2.0).
- * V1.1 7-Mar-91, J Love Modified output display.
- * V1.2 27-May-91, J Love Changed for CDF V2.1 enhancements.
- * V1.3 25-Jun-91, J Love Renamed CDF for portability.
- * V1.4 2-Aug-91, J Love Added MIPSEB encoding. Use 'Exit'/'ExitBAD'.
- * V1.5 12-Sep-91, J Love Modified for IBM-PC port.
- * V1.6 10-Feb-92, J Love CDF V2.2.
- *
- ******************************************************************************/
-
- #include <stdio.h>
-
- #include "cdfdist.h"
-
- #define N_DIMS 2
- #define DIM_0_SIZE 2
- #define DIM_1_SIZE 3
-
- #define stop(status,message) { \
- char text[CDF_STATUSTEXT_LEN+1]; \
- CDFerror (status, text); \
- printf ("%s\n", text); \
- printf ("OOPS (%s)\n", message); \
- ExitBAD; \
- }
-
- main ()
- {
- CDFid id;
- CDFstatus status;
- long dim_n;
- static long encoding = NETWORK_ENCODING;
- static long actual_encoding = NETWORK_ENCODING;
- static long majority = ROW_MAJOR;
- static long numDims = N_DIMS;
- static long dimSizes[N_DIMS] = { DIM_0_SIZE, DIM_1_SIZE };
- static long varDataType = { CDF_INT4 };
- long varDataType_out;
- static long varNumElements = { 1 };
- long varNumElements_out;
- long varNum_out;
- static long varValues[DIM_0_SIZE][DIM_1_SIZE] = { 1, 2, 3, 4, 5, 6 };
- long indices[N_DIMS];
- static long recNum = { 0 };
- long varValue_out;
- static long recStart = { 0 };
- static long recCount = { 1 };
- static long recInterval = { 1 };
- static long counts[N_DIMS] = { DIM_0_SIZE, DIM_1_SIZE };
- static long intervals[N_DIMS] = { 1, 1 };
- long varBuffer_out[DIM_0_SIZE][DIM_1_SIZE];
- long attrNum_out;
- static long entryNum = { 2 };
- long maxEntry_out;
- static long attrScope = { GLOBAL_SCOPE_ASSUMED };
- long attrScope_out;
- static long new_attrScope = { GLOBAL_SCOPE };
- static long attrDataType = { CDF_INT4 };
- long attrDataType_out;
- static long attrNumElements = { 1 };
- long attrNumElements_out;
- static long attrValue = { 1 };
- long attrValue_out;
- long encoding_out;
- long majority_out;
- long numDims_out;
- long dimSizes_out[N_DIMS];
- long maxRec_out;
- long numVars_out;
- long numAttrs_out;
- long version_out;
- long release_out;
-
- long x0, x1, x;
-
- static long varRecVariance = { VARY };
- long varRecVariance_out;
- static long varDimVariances[N_DIMS] = { VARY, VARY };
- long varDimVariances_out[N_DIMS];
-
- static char varName[] = "VAR1";
- static char new_varName[] = "VAR2";
- char varName_out[CDF_VAR_NAME_LEN+1];
- static char attrName[] = "ATTR1";
- static char new_attrName[] = "ATTR2";
- char attrName_out[CDF_ATTR_NAME_LEN];
- char CopyRightText[CDF_COPYRIGHT_LEN+1];
- char errorText[CDF_ERRTEXT_LEN+1];
-
- /*****************************************************************************/
-
- printf ("\n\nTesting Standard/C interface...\n\n");
-
- /******************************************************************************
- * Create CDF.
- ******************************************************************************/
-
- status = CDFcreate ("QST2C", numDims, dimSizes, encoding, majority, &id);
- if (status < CDF_OK) {
- if (status == CDF_EXISTS) {
- status = CDFopen ("QST2C", &id);
- if (status != CDF_OK) stop (status, "1.0");
-
- status = CDFdelete (id);
- if (status != CDF_OK) stop (status, "1.1");
-
- status = CDFcreate ("QST2C", numDims, dimSizes, encoding, majority,
- &id);
- if (status != CDF_OK) stop (status, "1.2");
- }
- else
- stop (status, "1.3");
- }
-
- /******************************************************************************
- * Create variable.
- ******************************************************************************/
-
- status = CDFvarCreate (id, varName, varDataType, varNumElements, varRecVariance,
- varDimVariances, &varNum_out);
- if (status != CDF_OK) stop (status, "2.0");
-
- /******************************************************************************
- * Close CDF.
- ******************************************************************************/
-
- status = CDFclose (id);
- if (status != CDF_OK) stop (status, "3.0");
-
- /******************************************************************************
- * Reopen CDF.
- ******************************************************************************/
-
- status = CDFopen ("QST2C", &id);
- if (status != CDF_OK) stop (status, "4.0");
-
- /******************************************************************************
- * Delete CDF.
- ******************************************************************************/
-
- status = CDFdelete (id);
- if (status != CDF_OK) stop (status, "5.0");
-
- /******************************************************************************
- * Create CDF again (previous delete will allow this).
- ******************************************************************************/
-
- status = CDFcreate ("QST2C", numDims, dimSizes, encoding, majority, &id);
- if (status != CDF_OK) stop (status, "6.0");
-
- /******************************************************************************
- * Create variable.
- ******************************************************************************/
-
- status = CDFvarCreate (id, varName, varDataType, varNumElements, varRecVariance,
- varDimVariances, &varNum_out);
- if (status != CDF_OK) stop (status, "7.0");
-
- /******************************************************************************
- * PUT to variable.
- ******************************************************************************/
-
- for (x0 = 0; x0 < DIM_0_SIZE; x0++)
- for (x1 = 0; x1 < DIM_1_SIZE; x1++)
- {
- indices[0] = x0;
- indices[1] = x1;
- status = CDFvarPut (id, CDFvarNum(id,varName), recNum, indices,
- &varValues[x0][x1]);
- if (status != CDF_OK) stop (status, "8.0");
- }
-
- /******************************************************************************
- * GET from the variable.
- ******************************************************************************/
-
- for (x0 = 0; x0 < DIM_0_SIZE; x0++)
- for (x1 = 0; x1 < DIM_1_SIZE; x1++)
- {
- indices[0] = x0;
- indices[1] = x1;
- status = CDFvarGet (id, CDFvarNum(id,varName), recNum, indices,
- &varValue_out);
- if (status != CDF_OK) stop (status, "9.0");
-
- if (varValue_out != varValues[x0][x1]) stop (status, "9.1");
- }
-
- /******************************************************************************
- * HyperPUT to the variable.
- ******************************************************************************/
-
- for (x0 = 0; x0 < DIM_0_SIZE; x0++)
- for (x1 = 0; x1 < DIM_1_SIZE; x1++)
- varValues[x0][x1] = -varValues[x0][x1];
-
- indices[0] = 0;
- indices[1] = 0;
-
- status = CDFvarHyperPut (id, CDFvarNum(id,varName), recStart, recCount,
- recInterval, indices, counts, intervals, varValues);
- if (status != CDF_OK) stop (status, "10.0");
-
- /******************************************************************************
- * HyperGET from variable.
- ******************************************************************************/
-
- status = CDFvarHyperGet (id, CDFvarNum(id,varName), recStart, recCount,
- recInterval, indices, counts, intervals,
- varBuffer_out);
- if (status != CDF_OK) stop (status, "11.0");
-
- for (x0 = 0; x0 < DIM_0_SIZE; x0++)
- for (x1 = 0; x1 < DIM_1_SIZE; x1++)
- if (varBuffer_out[x0][x1] != varValues[x0][x1]) stop (status, "11.1");
-
- /******************************************************************************
- * Create attribue.
- ******************************************************************************/
-
- status = CDFattrCreate (id, attrName, attrScope, &attrNum_out);
- if (status != CDF_OK) stop (status, "12.0");
-
- /******************************************************************************
- * PUT to attribute.
- ******************************************************************************/
-
- status = CDFattrPut (id, CDFattrNum(id,attrName), entryNum, attrDataType,
- attrNumElements, &attrValue);
- if (status != CDF_OK) stop (status, "13.0");
-
- /******************************************************************************
- * GET from attribute.
- ******************************************************************************/
-
- status = CDFattrGet (id, CDFattrNum(id,attrName), entryNum, &attrValue_out);
- if (status != CDF_OK) stop (status, "14.0");
-
- /******************************************************************************
- * Get CDF documentation.
- ******************************************************************************/
-
- status = CDFdoc (id, &version_out, &release_out, CopyRightText);
- if (status != CDF_OK) stop (status, "15.0");
-
- printf ("CDF V%ld.%ld\n", version_out, release_out); /* V1.1 */
- printf ("%s\n", CopyRightText);
-
- /******************************************************************************
- * Inquire CDF.
- ******************************************************************************/
-
- status = CDFinquire (id, &numDims_out, dimSizes_out, &encoding_out,
- &majority_out, &maxRec_out, &numVars_out, &numAttrs_out);
- if (status != CDF_OK) stop (status, "16.0");
-
- if (numDims_out != numDims) stop (status, "16.1");
- for (x = 0; x < N_DIMS; x++)
- if (dimSizes_out[x] != dimSizes[x]) stop (status, "16.2");
- if (encoding_out != actual_encoding) stop (status, "16.3");
- if (majority_out != majority) stop (status, "16.4");
- if (maxRec_out != 0) stop (status, "16.5");
- if (numVars_out != 1) stop (status, "16.6");
- if (numAttrs_out != 1) stop (status, "16.7");
-
- /******************************************************************************
- * Rename variable.
- ******************************************************************************/
-
- status = CDFvarRename (id, CDFvarNum(id,varName), new_varName);
- if (status != CDF_OK) stop (status, "17.0");
-
- /******************************************************************************
- * Inquire variable.
- ******************************************************************************/
-
- status = CDFvarInquire (id, CDFvarNum(id,new_varName), varName_out,
- &varDataType_out, &varNumElements_out,
- &varRecVariance_out, varDimVariances_out);
- if (status != CDF_OK) stop (status, "18.0");
-
- if (strcmp(varName_out,new_varName) != 0) stop (status, "18.1");
- if (varDataType_out != varDataType) stop (status, "18.2");
- if (varNumElements_out != varNumElements) stop (status, "18.3");
- if (varRecVariance_out != varRecVariance) stop (status, "18.4");
-
- for (dim_n = 0; dim_n < numDims; dim_n++)
- if (varDimVariances_out[dim_n] != varDimVariances[dim_n]) stop (status, "18.4");
-
- /******************************************************************************
- * Close variable.
- ******************************************************************************/
-
- status = CDFvarClose (id, CDFvarNum(id,new_varName));
- if (status != CDF_OK) stop (status, "19.0");
-
- /******************************************************************************
- * Rename attribute.
- ******************************************************************************/
-
- status = CDFattrRename (id, CDFattrNum(id,attrName), new_attrName);
- if (status != CDF_OK) stop (status, "20.0");
-
- /******************************************************************************
- * Correct attribute scope.
- ******************************************************************************/
-
- status = CDFattrCorrectScope (id, CDFattrNum(id,new_attrName), new_attrScope);
- if (status != CDF_OK) stop (status, "21.0");
-
- /******************************************************************************
- * Inquire attribute.
- ******************************************************************************/
-
- status = CDFattrInquire (id, CDFattrNum(id,new_attrName), attrName_out,
- &attrScope_out, &maxEntry_out);
- if (status != CDF_OK) stop (status, "22.0");
-
- if (strcmp(attrName_out,new_attrName) != 0) stop (status, "22.1");
- if (attrScope_out != attrScope_out) stop (status, "22.2");
- if (maxEntry_out != entryNum) stop (status, "22.3");
-
- /******************************************************************************
- * Inquire attribute entry.
- ******************************************************************************/
-
- status = CDFattrEntryInquire (id, CDFattrNum(id,new_attrName), entryNum,
- &attrDataType_out, &attrNumElements_out);
- if (status != CDF_OK) stop (status, "23.0");
-
- if (attrDataType_out != attrDataType) stop (status, "23.1");
- if (attrNumElements_out != attrNumElements) stop (status, "23.1");
-
- /******************************************************************************
- * Get error text.
- ******************************************************************************/
-
- CDFerror (CDF_OK, errorText);
- printf ("%s\n", errorText);
-
- /******************************************************************************
- * Close CDF.
- ******************************************************************************/
-
- status = CDFclose (id);
- if (status != CDF_OK) stop (status, "24.0");
-
- /*****************************************************************************/
-
- printf ("\nTEST SUCCESSFUL\n");
- Exit;
-
- #if defined(__MSDOS__)
- return;
- #endif
- }
-